package guestbook.controlador;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

import java.util.Enumeration;
import java.util.Locale;
import java.util.logging.Logger;

import javax.servlet.http.*;

import com.google.appengine.repackaged.org.json.JSONException;
import com.google.appengine.repackaged.org.json.JSONObject;

import guestbook.dao.GenericDAO;
import guestbook.dao.GenericDAOJPAImpl;
import guestbook.dao.SaludoDAO;
import guestbook.dao.SaludoDAOImplementation;
import guestbook.persistencia.Saludo;
import guestbook.persistencia.Voto;

public class VotarMensajeServlet extends HttpServlet {
	private static final Logger log = Logger
			.getLogger(VotarMensajeServlet.class.getName());

	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws IOException {

		Enumeration<String> enumNombres = req.getParameterNames();
		while (enumNombres.hasMoreElements()) {
			String nombreParam = enumNombres.nextElement();
			System.out.println("VotarMensajeServlet doGet recibido "
					+ nombreParam + " valor=" + req.getParameter(nombreParam));
		}

		Long idMensaje = Long.parseLong(req.getParameter("idMensaje"));
		SaludoDAO saludoDAO = new SaludoDAOImplementation();
		//GenericDAO<Saludo, Long> genericDAO = new GenericDAOJPAImpl<Saludo, Long>();
		
		Saludo saludo = saludoDAO.findByPK(guestbook.persistencia.Saludo.class, idMensaje);
		if (req.getParameter("voto").equals("si")) {
			Voto voto = new Voto();
			voto.setVoto(Integer.parseInt(req.getParameter("rate")));
			voto.setSaludo(saludo);
			saludo.getVotos().add(voto);
		}

		resp.setContentType("application/x-json;charset=UTF-8");
		resp.setHeader("Cache-Control", "no-store");
		PrintWriter out = resp.getWriter();
		try {
			JSONObject jsonObject = new JSONObject();
			if (saludo.getVotos().size() == 0) {
				jsonObject.put("avg", "No votes");
			} else {
				double sumVotos = 0;
				for (Voto v : saludo.getVotos()) {
					sumVotos += v.getVoto();
				}

				jsonObject.put("avg", new DecimalFormat("0.00",
						new DecimalFormatSymbols(Locale.ENGLISH))
						.format(sumVotos / saludo.getVotos().size()));
				jsonObject.put("votes", saludo.getVotos().size());
				resp.getWriter().println(jsonObject.toString());
			}
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		saludoDAO.cerrar();

	}
}